package cn.iocoder.yudao.im.service;


import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.im.domain.NoticeImMessage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 消息表 服务类
 * </p>
 *
 * @author zcc
 * @since 2024-05-22
 */
public interface NoticeImMessageService extends IService<NoticeImMessage> {

    /**
     * 发送私聊消息(高并发接口，查询mysql接口都要进行缓存)
     *
     * @param dto 私聊消息
     * @return 消息id
     */
    Long sendMessage(NoticeImMessage dto);


    /**
     * 撤回消息
     *
     * @param id 消息id
     */
    CommonResult recallMessage(Long id);

    /**
     * 拉取历史聊天记录
     *
     * @param friendId 好友id
     * @param page     页码
     * @param size     页码大小
     * @return 聊天记录列表
     */
    List<NoticeImMessage> findHistoryMessage(Long friendId, Long page, Long size);


    /**
     * 拉取离线消息，只能拉取最近1个月的消息，最多拉取1000条
     *
     * @param minId 消息起始id
     */
    CommonResult pullOfflineMessage(Long minId);

    /**
     * 消息已读,将整个会话的消息都置为已读状态
     *
     * @param friendId 好友id
     */
    void readedMessage(Long friendId);

    /**
     * 获取某个会话中已读消息的最大id
     *
     * @param userId 好友id
     */
    Long getMaxReadedId(Long userId);


    Long getCommunicateCount(Long userId);
}
